package com.yuntsg.nnsfcp.test.pdf.asposepdf.examples.AsposePdfExamples.SecurityAndSignatures;

import com.aspose.pdf.Document;
import com.aspose.pdf.PasswordType;
import com.aspose.pdf.exceptions.InvalidPasswordException;
import com.aspose.pdf.facades.PdfFileInfo;

public class HowToDetermineIfTheSourcePDFIsPasswordProtected {
    public static void main(String[] args) {
        howToDetermineIfTheSourcePDFIsPasswordProtected();
        getInformationAboutPDFDocumentSecurity();
        determineCorrectPasswordFromArray();
    }

    public static void howToDetermineIfTheSourcePDFIsPasswordProtected() {
        // load the source PDF document
        PdfFileInfo fileInfo = new PdfFileInfo("source.pdf");
        // determine that source PDF file is Encrypted with password
        Boolean encrypted = fileInfo.isEncrypted();
        // MessageBox displays the current status related to PDf encryption
        System.out.println(encrypted.toString());
    }

    public static void getInformationAboutPDFDocumentSecurity() {
        // instantiate FielInfo object
        PdfFileInfo fileInfo = new PdfFileInfo();
        // bind source PDF file
        fileInfo.bindPdf("source.pdf");
        // print if source file is password encrypted
        System.out.println("Is document encrypted = " + fileInfo.isEncrypted());
        // determine if the password type for document is User
        if (fileInfo.getPasswordType() == PasswordType.User)
            ;
        // print password type information
        System.out.println("Password type = " + fileInfo.getPasswordType() + " (type = User)");
        fileInfo = new PdfFileInfo();
        fileInfo.bindPdf("source.pdf", "user");
        // print if document is encrypted
        System.out.println("Document is encrypted = " + fileInfo.isEncrypted());
        // determine if the password type for document is Owner
        if (fileInfo.getPasswordType() == PasswordType.Owner)
            ;
        // print password type information
        System.out.println("Password type = " + fileInfo.getPasswordType() + " (type = Owner)");
        // print if document has open password specified
        System.out.println("Document has Open Password = " + fileInfo.hasOpenPassword());
        // print if document has edit password specified
        System.out.println("Document has Edit Password = " + fileInfo.hasEditPassword());
        fileInfo = new PdfFileInfo();
        fileInfo.bindPdf("c:/pdftest/source.pdf");
        // print if document is encrypted
        System.out.println("Document is encrypted = " + fileInfo.isEncrypted());
        if (fileInfo.getPasswordType() == PasswordType.Inaccessible)
            ;
        // print password type information
        System.out.println("Password type = " + fileInfo.getPasswordType() + " (type = Inaccessible)");
        if (fileInfo.hasOpenPassword())
            ;
        // Document has open password enable
        System.out.println("Document has open password enabled = " + fileInfo.hasOpenPassword());
        try {
            boolean hasOwnerPassword = fileInfo.hasEditPassword();
            System.out.println("When PasswordType is Inaccessible we can't read HasEditPassword property.");
        } catch (Exception e) {
            // write what we expect
        }
    }

    /*
     * // load source PDF file PdfFileInfo info = new PdfFileInfo(); info.bindPdf("source.pdf"); // determine if the source PDF is encrypted System.out.println("File is password protected " + info.isEncrypted()); String[] passwords = new String[] { "test", "test1", "user", "test3", "sample" }; for (int passwordcount = 0; passwordcount < passwords.length; passwordcount++) { try { Document doc = new Document("source.pdf", passwords[passwordcount]); if (doc.getPages().size() > 0) { System.out.println("Password = " + passwords[passwordcount] + " is correct"); System.out.println("Number of Page in document are = " + doc.getPages().size()); } } catch (InvalidPasswordException ex) { System.out.println("------------------------------------------"); System.out.println("Password = " + passwords[passwordcount] + "  is not correct"); } }
     */
    public static void determineCorrectPasswordFromArray() {
        // load source PDF file
        PdfFileInfo info = new PdfFileInfo();
        info.bindPdf("source.pdf");
        // determine if the source PDF is encrypted
        System.out.println("File is password protected " + info.isEncrypted());
        String[] passwords = new String[]{"test", "test1", "user", "test3", "sample"};
        for (int passwordcount = 0; passwordcount < passwords.length; passwordcount++) {
            try {
                Document doc = new Document("source.pdf", passwords[passwordcount]);
                if (doc.getPages().size() > 0) {
                    System.out.println("Password = " + passwords[passwordcount] + " is correct");
                    System.out.println("Number of Page in document are = " + doc.getPages().size());
                }
            } catch (InvalidPasswordException ex) {
                System.out.println("------------------------------------------");
                System.out.println("Password = " + passwords[passwordcount] + "  is not correct");
            }
        }
    }
}
